容器
创建容器
使用『docker create』来创建容器,但是这种创建方法不会启动容器,创建好了的容器是『stop』状态
docker create -it centos
使用『docker run』来创建并启动容器
# 使用容器中的『echo』打印『Hello』后,自动停止容器
docker run -it centos /bin/echo "Hello"
# 会执行容器shell命令,进入交互模式,进行命令行操作
docker run -it centos /bin/bash
# 可以使用-d参数,进入守护状态模式下运行容器,一般使用-d都是运行服务
docker run -d centos /bin/bash
查看容器
可以使用『docker ps』来查看容器状态
docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
463d6a3ba419 centos "/bin/echo Hello" 7 seconds ago Exited (0) 5 seconds ago lucid_knuth
2ae596744334 test "/bin/bash" 3 hours ago Created vigilant_lumiere
名称 | 描述 |
---|---|
CONTAINER ID | 容器的唯一ID |
IMAGE | 容器名字 |
COMMAND | 运行容器时的指令 |
CREATED | 创建时间 |
STATUS | 容器的状态,Sleep、Stop、Exited、Running |
PORTS | 容器映射的端口 |
NAMES | 容器名称,在创建容器时未指定名称,系统会随机取名 |
终止容器
可以使用『docker stop』来终止一个正在运行的容器
docker stop [img_id]
启动容器
终止的容器可以使用『docker start』来启动容器
docker start [img_id]
进入容器
在使用『-d』参数时,容器启动后会进入后台,用户无法看到容器中的信息。某些时候如果要进入容器进行操作有很多种方法『docker attach』、『docker exec』、『nsenter』工具等。
『docker attach』这个命令有时候并不方便,当多个窗口同时『attach』时,所有窗口都会同步显示。当某个窗口因命令阻塞时,其他窗口也无法执行操作了。
docker attach [img_id]
『docker exec』自从 Docker 1.3 版本起,提供了一个更加方便的工具 exec ,可以直接在容器内运行命令。像下列命令就是进入它的『/bin/bash』交互模式
docker exec -it [img_id] /bin/bash
『nsenter』工具在 util-linux 2.23 版本后包含的。如果系统中 util-linux 包没有该命令,可以按照下面的方法从源码安装
cd /tmp curl https://www.kernel.org/pub/linux/utils/util-linux/v2.24/util-linux-2.24.tar.gz | tar -zxf- cd util-linux-2.24 ./configure --without-ncurese make nserter && cp nserter /usr/local/bin
下列列出进入容器的完整例子
$ sudo docker run -idt ubuntu 243c32535da7d142fb0e6df616a3c3ada0b8ab417937c853a9e1c251f499f550 $ sudo docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 243c32535da7 ubuntu:latest "/bin/bash" 18 seconds ago Up 17 seconds nostalgic_hypatia $ PID=$(docker-pid 243c32535da7) 10981 $ sudo nsenter --target 10981 --mount --uts --ipc --net --pid root@243c32535da7:/# root@ce554267d7a4:/# w 11:07:36 up 3:14, 0 users, load average: 0.00, 0.02, 0.05 USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT root@ce554267d7a4:/# ps -ef #通过ps -ef命令可以看到容器中运行的进程 UID PID PPID C STIME TTY TIME CMD root 1 0 0 10:56 ? 00:00:00 /bin/sh -c while true; do echo hello world; sleep 1; done root 699 0 0 11:07 ? 00:00:00 /bin/bash root 716 1 0 11:07 ? 00:00:00 sleep 1 root 717 699 0 11:07 ? 00:00:00 ps -ef
删除容器
可以使用『docker rm』命令在删除终止状态的容器
docker rm [opt] [img_id]
[opt] 操作 | 描述 |
---|---|
-f, —force=false | 强制终止并且删除一个运行中的容器 |
-l, —link=false | 删除容器链接,但是保留容器 |
-v, —volumes=false | 删除容器挂载的数据卷 |
导入和导出容器
『docker export』导出容器
可以导出一个已经创建的容器到一个文件,不管此时这个容器是否处于运行状态
docker export [img_id] > test_for_run.tar
『docker import』导入容器
导出的容器可以使用导入命令,导入成镜像
docker import test_for_run.tar
容器『import』与『load』的区别
实际上,既可以使用『docker load』命令来导入镜像储存文件到本地的镜像仓库,又可以使用『docker import』命令来导入一个容器快照到本地镜像仓库。这两者的区别在于容器快照文件将丢弃所有的历史记录和元数据信息,而镜像储存文件将保存完整记录,体积也要大一些。此外,从容器快照文件导入时可以重新制定标签等元数据信息。
创建镜像
使用『docker commit』来通过已有的,高质量的容器,将它储存为镜像
docker commit -m "Add a new img" -a "Docker newbee" [img_id] [img_name]
以下我们先运行一个容器,在这个容器里面创建一个test文件,再把这个容器储存为镜像
docker run -it centos /bin/bash
docker commit -m "Add a new file" -a "Docker Newbee" 936f3c58b5b5 test